package br.com.sgpv2.controler.entidade;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import br.com.sgpv2.entity.organograma.Entidade;
import br.com.sgpv2.entity.pessoa.endereco.Cidade;
import br.com.sgpv2.entity.pessoa.endereco.Estado;
import br.com.sgpv2.entity.pessoa.endereco.Pais;
import br.com.sgpv2.service.entidade.EntidadeService;
import br.com.sgpv2.service.pessoa.PessoaService;



/**
 * Handles requests for the application /entidades.
 */

@Controller
public class EntidadeController {
	
	@Autowired
	private EntidadeService entidadeService;
	@Autowired
	private PessoaService pessoaService;

	/**
	 * avança para página de inclusão de entidades.
	 * @throws Exception 
	 */
	@RequestMapping(value = "/entidade/salvar", method = RequestMethod.GET)
	public String salvar(Model model) throws Exception {
	
		List<String> paises = new ArrayList<String>();
		List<Pais> paisesBanco = pessoaService.consultarPaises();
		for (Pais pais : paisesBanco) {
			paises.add(pais.getNomePais());
		}		
		
		model.addAttribute("paises",paises);
		model.addAttribute("entidade", new Entidade());
		
		return "entidade/entidade-incluir";		
	}
	
	/**
	 * inclui uma entidade no sistema.
	 * @throws Exception 
	 */
	@RequestMapping(value = "/entidade/salvar", method = RequestMethod.POST)
	public String salvar(@ModelAttribute Entidade entidade, Model model, BindingResult result) throws Exception {
		
		if(entidade.getEndereco().getEstadoTransiente() != null){
			Estado estadoBanco = pessoaService.buscarEstadoPorNome(entidade.getEndereco().getEstadoTransiente());
			entidade.getEndereco().setEstado(estadoBanco);
		}			
		if(entidade.getEndereco().getCidadeTransiente() != null){
			Cidade cidadeBanco = pessoaService.buscarCidadePorNome(entidade.getEndereco().getCidadeTransiente());
			entidade.getEndereco().setCidade(cidadeBanco);
		}
		
		Pais paisBanco = pessoaService.buscarPaisPorNome(entidade.getEndereco().getPaisTransiente());
		entidade.getEndereco().setPais(paisBanco);
			
		
		
		if(entidade != null){
			entidadeService.salvar(entidade);
		}
		return "redirect:../entidades";
	}
	
	
	/**
	 * avança para página de alteração de entidade.
	 * @throws Exception 
	 */
	@RequestMapping(value = "/entidade/alterar/{pk}", method = RequestMethod.GET)
	public String getAlterar(@PathVariable Integer pk, Model model) throws Exception {
		Entidade entidadeAlteracao = entidadeService.buscar(pk);
		if(entidadeAlteracao != null){
			model.addAttribute("entidade",entidadeAlteracao);
			
			List<String> paises = new ArrayList<String>();
			List<Pais> paisesBanco = pessoaService.consultarPaises();
			for (Pais pais : paisesBanco) {
				paises.add(pais.getNomePais());
			}		
					
			model.addAttribute("paises",paises);
			model.addAttribute("estados",pessoaService.consultarEstadosPorPais(entidadeAlteracao.getEndereco().getPais()));
			//model.addAttribute("cidades",pessoaService.consultarCidadesPorEstado(pessoaAlteracao.getEndereco().getEstado().getSiglaEstado()));
			return "entidade/entidade-alterar";
		}else{
			return "redirect:../entidades";
		}		
	}
	
	/**
	 * avança para página de alteração de entidades.
	 * @throws Exception 
	 */
	@RequestMapping(value = "/entidade/alterar", method = RequestMethod.POST)
	public String alterar(@ModelAttribute Entidade entidade, Model model, BindingResult result) throws Exception {
		if(entidade.getEndereco().getEstadoTransiente() != null){
			Estado estadoBanco = pessoaService.buscarEstadoPorNome(entidade.getEndereco().getEstadoTransiente());
			entidade.getEndereco().setEstado(estadoBanco);
		}			
		if(entidade.getEndereco().getCidadeTransiente() != null){
			Cidade cidadeBanco = pessoaService.buscarCidadePorNome(entidade.getEndereco().getCidadeTransiente());
			entidade.getEndereco().setCidade(cidadeBanco);
		}
		
		Pais paisBanco = pessoaService.buscarPaisPorNome(entidade.getEndereco().getPaisTransiente());
		entidade.getEndereco().setPais(paisBanco);
						
		
		if(entidade != null){
			entidadeService.alterar(entidade);
		}
		return "redirect:../entidades";
	}
	
	/**
	 * Exclui uma pessoa.
	 * @throws Exception 
	 */
	@RequestMapping(value = "/entidade/excluir/{pk}", method = RequestMethod.GET)
	public String excluir(@PathVariable Integer pk, Model model) throws Exception {
		Entidade entidadeExclusao = entidadeService.buscar(pk);
		
		if(entidadeExclusao !=null){
			entidadeService.excluir(entidadeExclusao);
		}
		
		List<Entidade> listaEntidades = entidadeService.listar();
		
		model.addAttribute("entidades", listaEntidades);
		
		return "redirect:/entidades";
	}

}
